package com.grupobbva.iici.dao.impl;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.naming.Context;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;

import com.grupobbva.iici.dao.LogDAO;
import com.grupobbva.iici.serializable.Log;
import com.grupobbva.iici.serializable.LogDto;
import com.grupobbva.iici.util.Conexion;

@Repository
public class LogDAOImpl extends BaseDAOImpl implements LogDAO, Serializable {

	private static final long serialVersionUID = 1L;

	private static Logger log = Logger.getLogger(LogDAOImpl.class);

	public List<Log> obtenerTodosLog(String fecIni, String fecFin, String codigoOficina) {
		Vector listaLog = null;
		String sql;
		Context initialContext;
		Connection con = null;

		try {

			if (codigoOficina == null || codigoOficina.equals("")) {

				sql = " SELECT sum(cant),num_oficina,des_oficina, nom_completo,num_registro, fec_consulta,tip_consulta,canal "
						+ " FROM ( select  count(cod_log) cant, num_oficina,des_oficina, nom_completo, TO_CHAR(fec_consulta,'DD/MM/YYYY') "
						+ "fec_consulta , tip_consulta,num_registro,canal FROM IICI.TIICI_LOG  " + "WHERE  TO_DATE(TO_CHAR(fec_consulta,'DD/MM/YYYY'),'DD/MM/YYYY')  BETWEEN TO_DATE('" + fecIni
						+ "','DD/MM/YYYY') AND TO_DATE('" + fecFin + "','DD/MM/YYYY') " + "GROUP BY ( num_oficina,des_oficina, nom_completo, fec_consulta, tip_consulta, num_registro,canal) "
						+ "ORDER BY num_oficina)  group by (num_oficina,des_oficina, nom_completo,fec_consulta,tip_consulta, num_registro,canal)";
			} else {

				sql = " SELECT sum(cant),num_oficina,des_oficina, nom_completo,num_registro, fec_consulta,tip_consulta,canal "
						+ " FROM ( select  count(cod_log) cant, num_oficina,des_oficina, nom_completo, to_char(fec_consulta,'dd/mm/yyyy') "
						+ "fec_consulta , tip_consulta,num_registro,canal FROM IICI.TIICI_LOG  " + "WHERE TO_DATE(TO_CHAR(fec_consulta,'DD/MM/YYYY'),'DD/MM/YYYY') BETWEEN TO_DATE('" + fecIni
						+ "','DD/MM/YYYY') AND TO_DATE('" + fecFin + "','DD/MM/YYYY')   and   num_oficina='" + codigoOficina + "' "
						+ "GROUP BY ( num_oficina,des_oficina, nom_completo, fec_consulta, tip_consulta, num_registro,canal,canal) "
						+ "ORDER BY num_oficina)  group by (num_oficina,des_oficina, nom_completo,fec_consulta,tip_consulta, num_registro,canal)";

			}
			con = Conexion.getConnection();
			Statement s = con.createStatement();
			ResultSet rs = null;

			try {
				rs = s.executeQuery(sql);

				while (rs.next()) {
					if (listaLog == null)
						listaLog = new Vector(0, 1);
					Log logBean = new Log();
					logBean.setTotalCentro(rs.getInt(1));
					logBean.setStr_num_oficina(rs.getString(2));
					logBean.setStr_des_oficina(rs.getString(3));
					logBean.setStr_nom_completo(rs.getString(4));
					logBean.setStr_num_registro(rs.getString(5));
					logBean.setStr_fec_consulta(rs.getDate(6));
					logBean.setStr_tipo(rs.getString(7));
					logBean.setStr_canal(rs.getString(8));

					listaLog.add(logBean);
				}

			} catch (Exception es) {
				es.getStackTrace();
			}finally {
				Conexion.close(con, s, rs);
			}

		} catch (Exception e) {
			e.getStackTrace();
		} 
		return listaLog;
	}
	
	public List<LogDto> obtenerTodosLog(String fecIni, String fecFin, String codigoOficina,String registro,String aplicativo,String codigoServicio) {
		Connection connection=null;
		ResultSet rs=null;
		Statement stm=null;
		List<LogDto> lstLog=new ArrayList<LogDto>();
		try{
			String sql="select TO_CHAR(FEC_CONSULTA,'MONTH', 'NLS_DATE_LANGUAGE=SPANISH') MES, " +
			"NUM_OFICINA,DES_OFICINA,NUM_REGISTRO,NOM_COMPLETO,COUNT(1) " +
			"FROM IICI.TIICI_LOG " +
			"WHERE " +
			"	 TRUNC(FEC_CONSULTA)	>=TO_DATE('"+fecIni+"','DD/MM/YYYY') " +
			"AND TRUNC(FEC_CONSULTA)	<=TO_DATE('"+fecFin+"','DD/MM/YYYY') ";
			if(codigoOficina!=null && !(codigoOficina.equals(""))){
				sql+="AND NUM_OFICINA	= '"+codigoOficina+"' ";
			}
			if(registro!=null && !(registro.equals(""))){
				sql+="AND NUM_REGISTRO	= '"+registro+"' ";
			}
			if(aplicativo!=null && !(aplicativo.equals(""))){
				sql+="AND APLICATIVO		= '"+aplicativo+"' ";
			}			
			if(codigoServicio!=null && !(codigoServicio.equals(""))){
				sql+="AND CODIGO_SERVICIO= '"+codigoServicio+"' ";
			}
			sql+="GROUP BY TO_CHAR(FEC_CONSULTA,'MONTH', 'NLS_DATE_LANGUAGE=SPANISH'),NUM_OFICINA,DES_OFICINA,NUM_REGISTRO,NOM_COMPLETO " +
			"ORDER BY MES,NUM_OFICINA,NUM_REGISTRO";
			connection=Conexion.getConnection();
			stm=connection.createStatement();
			log.info("sql:"+sql);
			rs=stm.executeQuery(sql);
			while(rs.next()){
				LogDto logDto=new LogDto();
				logDto.setMes(rs.getString(1));
				logDto.setCodigoOficina(rs.getString(2));
				logDto.setNombreOficina(rs.getString(3));
				logDto.setRegistro(rs.getString(4));
				logDto.setNombreCompleto(rs.getString(5));
				logDto.setNroConsultas(rs.getInt(6));
				lstLog.add(logDto);
			}
			
		}catch(Exception e){
			log.info(e);
		}finally{
			Conexion.close(connection, stm, rs);
		}
		return lstLog;
	}
}
